package org.jiajie.coffeecodes.concurrent.pattern.guarded.suspension;

/**
 * @author jay
 */
public class Message {
    String id;
    String content;

    public Message(String id, String content) {
        this.id = id;
        this.content = content;
    }

    /**
     * 该方法可以发送消息
     * @param msg   消息
     */
    void send(Message msg){
        // 省略相关代码
    }

    /**
     * MQ消息返回后会调用该方法
     * 该方法的执行线程不同于发送消息的线程
     * @param msg   消息
     */
    void onMessage(Message msg){
        // 省略相关代码
        // 如何找到匹配的go？
        GuardedObject<Message> go = new GuardedObject<>();
        go.onChanged(msg);
        // 唤醒等待的线程
        GuardedObject.fireEvent(msg.id, msg);
    }

    Respond handleWebReq(){
        // 创建一消息
        Message msg1 = new Message("1", "{...}");
        // 发送消息
        send(msg1);
        // 利用GuardedObject实现等待
        GuardedObject<Message> go = new GuardedObject<>();
        Message r = go.get(t -> t != null);
        // 如何等待MQ返回的消息呢？
        String result = "";
        return null;
    }
}
